iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
Software Development

持續進化論系列 第 9

DAY09 - 輔助參數

  • 分享至 

  • xImage
  •  

Tinker 不只可以拿來搜尋資料,當然也可以對資料進行新增修改等動作,此時先來新增一名叫 steven 的使用者

App\Models\User::create(['name'=>'steven', 'gender' => 1])

卻發現跳出了警告

Illuminate\Database\Eloquent\MassAssignmentException with message 'Add [name] to fillable property to allow mass assignment on [App\Models\User].'

是因為有一個 fillable 的參數要設定,有被加入該參數的 column 才能進行新增或修改。

protected $fillable = [
    'name',
    'gender',
];

但也是有以下方式可以繞過 fillable 來新增資料

$user = new App\Models\User()
$user->name = ‘tod’
$user->gender = 1
$user->save()

下一個要介紹的參數是 hidden ,該參數可以讓指定的 column 在沒有被特定搜尋的時候隱藏,舉例來說我並不想在平常就顯示使用者的性別,那麼我就將 gender 加入 hidden 裡面

protected $hidden = [
    'gender',
];

此時將搜尋出來的資料陣列化時就會自動將該 column 隱藏,常用於隱藏密碼或一些敏感資料

casts 參數可以將輸出的資料轉為設定的格式

protected $casts = [
    'updated_at' => 'datetime:Y-m-d H:i:s',
];

最後要介紹的是 set 及 get attribute,attribute 可以在資料讀取或是寫入前做一些提前的處理,最常見的 set attribute 會用於密碼的寫入,眾所皆知密碼是不能以明碼的方式存進資料庫,所以寫一個密碼的 set attribute 就可以保證任何關於密碼的變動都會做雜湊,但這次的舉例中沒有密碼的 column ,所以直接寫 code 做示範。

假設密碼在 User 的 column 名稱為 password ,那麼便在 User 的 model 加上這段 method:

public function setPasswordAttribute($value)
{
    $this->attributes['password'] = Hash::make($value);
}

get attribute 則是可以將資料讀取出來之後做處理或是組合,以這次的例子,我想在 User 直接寫一個自我介紹姓名跟性別,我可以這麼做

public function getSelfIntroductionAttribute()
{
    $gender = '';
    if ($this->gender == 0) {
        $gender = '女生';
    } elseif ($this->gender == 1) {
        $gender = '男生';
    }

    return '你好,我叫' . $this->name . ',我是' . $gender;
}

https://ithelp.ithome.com.tw/upload/images/20220909/201150482TdMCY8Isz.png
attribute 在使用上只需要注意 method 的命名要使用小駝峰,在用來搜尋的時候要用底線即可,以上就是幾個在 Model 較常使用的 Method。


上一篇
DAY08 - 創造的工具
下一篇
DAY10 - 返樸歸真
系列文
持續進化論30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言